Advances in computer and software programming technology usually are heralded with the benefits the advances bring. The benefits are typically performance, security, programming paradigm improvements or other types of advantages. However, advances typically bring undesired consequences, such as the technological advances may not be usable with pre-existing software programs.
In such situations, a major development project must be undertaken to either substantially alter the pre-existing programs or to write new code from scratch that can take advantage of the technological advances. Accordingly, the time and resources expended in developing, implementing, testing, deploying, and maintaining pre-existing programs or legacy systems are mostly lost.